package Practice.dao;

import java.sql.*;

/**
 * @author hyhWTX
 * @version 1.0
 * @ClassName DBUtils
 * @date 2022年08月12日 14:54
 * @Description: 数据库操作封装类
 */
public class DBUtils {
    //    连接对象
    protected Connection con = null;
    //    预处理对象
    protected PreparedStatement pre = null;
    //    操作结果集
    protected ResultSet res = null;

    //    连接数据库
    public Connection getCon() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.cj.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc-db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai", "root", "root");
        return con;
    }

    //    数据库释放资源
    public void Close() {
        try {
            if (pre != null) {
                pre.close();
            }
            if (res != null) {
                res.close();
            }
            if (con != null) {
                con.close();
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            pre = null;
            res = null;
            con = null;
        }
    }

    //    实现数据库的基本操作的过程
    public int excute(String sql, Object... prams) {
        try {
            //连接数据库
            this.getCon();
            pre = con.prepareStatement(sql);
            //设置SQL语句中？号占位符的值
            //判断SQL语句中是否存在?号占位符
            if (prams != null && prams.length != 0) {
                    //循环设置SQL语句中?号占位符的值
                for (int i = 0; i < prams.length; i++) {
                    pre.setObject(i + 1, prams[i]);
                }
            }
            //执行SQL语句并返回结果
            return pre.executeUpdate();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }finally {
            //关闭资源连接，释放资源
            this.Close();
        }

        return 0;
    }

}
